package com.wwlwxg.spring_security.config;

import org.springframework.http.HttpInputMessage;
import org.springframework.http.HttpOutputMessage;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.http.converter.HttpMessageNotWritableException;

import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

public class DiyMessageConverter implements HttpMessageConverter<Pet> {
  @Override
  public boolean canRead(Class<?> aClass, MediaType mediaType) {
    return false;
  }

  @Override
  public boolean canWrite(Class<?> aClass, MediaType mediaType) {
    return aClass.isAssignableFrom(Pet.class);
  }

  // 服务器要统计所有MessageConverter都能写出哪些内容类型
  @Override
  public List<MediaType> getSupportedMediaTypes() {
    return MediaType.parseMediaTypes("application/x-diy");
  }

  @Override
  public Pet read(Class<? extends Pet> aClass, HttpInputMessage httpInputMessage) throws IOException, HttpMessageNotReadableException {
    return null;
  }

  @Override
  public void write(Pet pet, MediaType mediaType, HttpOutputMessage httpOutputMessage) throws IOException, HttpMessageNotWritableException {
    // 自定义协议数据的写出
    String data = pet.getName() + ";" + pet.getId() + ";";

    //写出去
    OutputStream body = httpOutputMessage.getBody();
    body.write(data.getBytes());
  }
}
